package com.databaseconnectionmobilapi.service.mysql;

import com.baomidou.mybatisplus.extension.service.IService;
import com.databaseconnectionmobilapi.domain.dto.*;
import com.databaseconnectionmobilapi.domain.entity.DatabaseEntity;
import com.databaseconnectionmobilapi.util.result.RestResult;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public interface MysqlOpService extends IService<DatabaseEntity> {
    /**
     * 创建 mysql 链接
     * @param id
     * @return
     */
    Connection establishMySQLConnection(Integer id);

    /**
     * 查看链接中的数据库
     * @param id
     * @return
     */
    RestResult selectDatabaseNames(Integer id);

    /**
     * 查看所有的字符集
     * @param id
     * @return
     */
    RestResult selectAllCharset(Integer id);

    /**
     * 查看字符集的所有的排序规则
     * @param selectAllCollationDTO
     * @return
     */
    RestResult selectAllCollation(SelectAllCollationDTO selectAllCollationDTO);

    /**
     * 增加数据库
     * @param addMysqlDatabase
     * @return
     * @throws SQLException
     */
    RestResult addMysqlDatabase(AddMysqlDatabaseDTO addMysqlDatabase) throws SQLException;

    /**
     * 删除数据库
     * @param delMysqlDatabaseDTO
     * @return
     * @throws SQLException
     */
    RestResult delMysqlDatabase(DelMysqlDatabaseDTO delMysqlDatabaseDTO) throws SQLException;

    /**
     * 更新数据库
     * @param updateMysqlDatabaseDTO
     * @return
     * @throws SQLException
     */
    RestResult updateMysqlDatabase(UpdateMysqlDatabaseDTO updateMysqlDatabaseDTO) throws SQLException;

    /**
     * 查看数据库下所有的表
     * @param selectAllTableDTO
     * @return
     */
    RestResult selectAllTable(SelectAllTableDTO selectAllTableDTO);

    /**
     * 增加表
     * @param addTableDTOS
     * @return
     */
    RestResult addTable(AddTableDTO addTableDTOS);

    /**
     * 更新表
     * @param updateTableDTO
     * @return
     * @throws SQLException
     */
    RestResult updateTable(UpdateTableDTO updateTableDTO) throws SQLException;

    /**
     * 删除表
     * @param delTableDTO
     * @return
     * @throws SQLException
     */
    RestResult delTable(DelTableDTO delTableDTO) throws SQLException;

    /**
     * 查看表结构
     * @param selectTableStructDTO
     * @return
     */
    RestResult selectTableStruct(SelectTableStructDTO selectTableStructDTO);

    /**
     * 查看表数据
     * @param selectDataDTO
     * @return
     */
    RestResult selectData(SelectDataDTO selectDataDTO);
}
